home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / examples / client.c < prev    next >
C/C++ Source or Header  |  2001-05-19  |  2KB  |  101 lines

  1.  
  2. /*
  3. **    tek/examples/client.c
  4. **
  5. **    simple socket message client
  6. **
  7. **    see also:
  8. **        server.c
  9. **        killserver.c
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <tek/msg.h>
  14. #include <tek/sock.h>
  15.  
  16. #define    NUMMSG    1000
  17. #define MSGSIZE    100
  18.  
  19. int main(int argc, char **argv)
  20. {
  21.     TAPTR basetask;
  22.  
  23.     basetask = TCreateTask(TNULL, TNULL, TNULL);
  24.     if (basetask)
  25.     {
  26.         TPORT *replyport = TTaskPort(basetask);
  27.         TPORT *msgport = TFindSockPort(basetask, "127.0.0.1", 44444, TNULL);
  28.         if (msgport)
  29.         {
  30.             char *msg, *replymsg;
  31.             int numsent = 0, numrecvd = 0, numfailed = 0;
  32.             TTIME t1, t2;
  33.     
  34.             TSTRPTR sendername;
  35.             TUINT msgstatus;
  36.             TTAGITEM msgattrs[3];
  37.             
  38.             TInitTags(msgattrs);
  39.             TAddTag(msgattrs, TMsg_Sender, &sendername);
  40.             TAddTag(msgattrs, TMsg_Status, &msgstatus);
  41.             
  42.             printf("sending %d messages to server and awaiting %d replies (msgsize: %d bytes)\n", NUMMSG, NUMMSG, MSGSIZE);
  43.             
  44.             TTimeQuery(basetask, &t1);
  45.             
  46.             do
  47.             {
  48.                 if (numsent < NUMMSG)
  49.                 {
  50.                     msg = TTaskAllocMsg(basetask, MSGSIZE);
  51.                     if (msg)
  52.                     {
  53.                         sprintf(msg, "hallo teklib");
  54.                         TPutReplyMsg(msgport, replyport, msg);
  55.                         numsent++;
  56.                     }
  57.                 }
  58.                 else
  59.                 {
  60.                     TWaitPort(replyport);
  61.                 }
  62.                 
  63.                 while ((replymsg = TGetMsg(replyport)))
  64.                 {
  65.                     numrecvd++;
  66.     
  67.                     TGetMsgAttrs(replymsg, msgattrs);
  68.     
  69.                     if (msgstatus == TMSG_STATUS_FAILED)
  70.                     {
  71.                         numfailed++;
  72.                     }
  73.     
  74.                     if (!((numsent+numrecvd+numfailed) & 0x1f))
  75.                     {
  76.                         printf("\rsent: %d - recvd: %d - failed: %d - sender: %s", numsent, numrecvd, numfailed, sendername); 
  77.                     }
  78.                     fflush(NULL);
  79.  
  80.                     TFreeMsg(replymsg);
  81.                 }
  82.                 
  83.     
  84.             } while (numrecvd < NUMMSG);
  85.     
  86.             TTimeQuery(basetask, &t2);
  87.     
  88.             printf("\rsent: %d - recvd: %d - failed: %d\n", numsent, numrecvd, numfailed);
  89.             
  90.             printf("all done. time elapsed: %.4fs\n", TTIMETOF(&t2) - TTIMETOF(&t1));
  91.         }
  92.  
  93.         TDestroy(msgport);
  94.         TDestroy(basetask);
  95.     }
  96.  
  97.     printf("good bye\n");
  98.  
  99.     return 0;
  100. }
  101.